﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using System.Runtime.Serialization;

namespace Sistema.Dominio
{
    [DataContract]
    public class PessoaVO : EntidadeValidavel<PessoaVO>, IPessoa
    {
        private DadosPessoaFisicaVO _dadosPessoais;
        private DadosPessoaJuridicaVO _dadosPessoaJuridica;
        private ConfiguraEmailVO _configuraEmail;
        private IList<TelefoneVO> _telefone;
        private IList<EmailVO> _email;
        private IList<EnderecoVO> _endereco;
        private enumTipoPessoa _tipoPessoa;

        public PessoaVO()
        {
            _telefone = new List<TelefoneVO>();
            _endereco = new List<EnderecoVO>();
            _email = new List<EmailVO>();
        }

        [DataMember]
        [ObjectValidator]
        public DadosPessoaFisicaVO DadosPessoais
        {
            get { return _dadosPessoais; }
            set { _dadosPessoais = value; base.RaisePropertyChanged("DadosPessoais"); }
        }

        [DataMember]
        [ObjectValidator()]
        public DadosPessoaJuridicaVO DadosEmpresariais
        {
            get { return _dadosPessoaJuridica; }
            set { _dadosPessoaJuridica = value; base.RaisePropertyChanged("DadosEmpresariais"); }
        }
        [DataMember]
        [ObjectValidator()]
        public ConfiguraEmailVO ConfiguraEmail
        {
            get { return _configuraEmail; }
            set { _configuraEmail = value; base.RaisePropertyChanged("ConfiguraEmail"); }
        }

        [DataMember]
        [ObjectCollectionValidator()]
        public IList<EnderecoVO> Endereco
        {
            get { return _endereco; }
            set { _endereco = value; base.RaisePropertyChanged("Endereco"); }
        }

        [DataMember]
        [ObjectCollectionValidator]
        public IList<TelefoneVO> Telefone
        {
            get { return _telefone; }
            set { _telefone = value; base.RaisePropertyChanged("Telefone"); }
        }


        [DataMember]
        [ObjectCollectionValidator]
        public IList<EmailVO> Email
        {
            get { return _email; }
            set { _email = value; base.RaisePropertyChanged("Email"); }
        }

        [DataMember]
        public enumTipoPessoa TipoPessoa
        {
            get { return _tipoPessoa; }
            set { _tipoPessoa = value; base.RaisePropertyChanged("TipoPessoa"); }
        }

        public string Nome
        {
            get { if (this.TipoPessoa == enumTipoPessoa.PessoaFisica) { return DadosPessoais.Nome; } else { return DadosEmpresariais.RazaoSocial; } }
        }
    }

    public enum enumTipoPessoa
    {
        PessoaFisica,
        PessoaJuridica
    }
}
